Skip to content

prompt: latex-raw-string-docstrings — unblock, implement across 6 repos, record - #255

Merged
Jammy2211 merged 6 commits into
mainfrom
claude/latex-raw-string-docstrings-9h4ine
Aug 20, 2026
Merged

prompt: latex-raw-string-docstrings — unblock, implement across 6 repos, record#255
Jammy2211 merged 6 commits into
mainfrom
claude/latex-raw-string-docstrings-9h4ine

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Mind-side record for the raw-stringing task: the blocker chain, the two prompts that were really one, the implementation across six repos, and the outcome.

What moved

  • draft/bug/hands/raw_string_docstring_prefix.mdactive/ → shipped as PyAutoHands#250 / feat: dashboard 'Epics' section under In flight with one-tap resume prompts #251 (merged).
  • draft/maintenance/workspaces/latex_raw_string_docstrings.mdactive/, issued as autolens_workspace#491, implemented across all six workspace repos.
  • Both entries removed from planned.md; active.md carries the live state.
  • lifecycle.py check and orphans clean throughout.

The blocker chain was shorter than recorded

hands-raw-string-docstring-prefix was marked blocked by hands-hygiene-leftovers. Reading that blocker rather than honouring it: it was local worktree contention, not a code dependency. feature/hands-hygiene-leftovers touches AGENTS.md, generate_release_notes.py, bin/autohands and two unrelated tests — zero overlap with add_notebook_quotes.py / env_config.py. Done in a separate clone, the two merge in either order and nothing had to wait.

Two prompts, one task

draft/maintenance/autolens_workspace/latex_docstrings_invalid_escape_warnings.md (2026-08-09) is the same defect measured on autolens_workspace alone — its 80 warnings across 17 files are exactly the 17 files in the newer six-repo survey, top-six counts matching line for line. Marked SUPERSEDED with a pointer, its unique content carried across, kept for its #457 / PR #459 origin trail. One prompt, one task.

A defect in the plan's own gate

The prompt's verification gate said "both sweeps return zero", with the sweep collecting SyntaxWarning. Invalid escapes are a SyntaxWarning only on Python 3.12+; on 3.11 they are a DeprecationWarning. Verified on 3.11.15: a docstring containing $\odot$ yields 0 SyntaxWarning and 1 DeprecationWarning — so the gate would have passed vacuously on a 3.11 interpreter and looked exactly like "already fixed". The sweep spec and the gate now require 3.12+ or both categories.

Result — 41 files, 180 literals, 131 corruptions repaired

repo files literals repaired PR
HowToFit 4 13 7 #47 merged
HowToGalaxy 4 20 13 #70 merged
HowToLens 8 32 21 #73 held red
autofit_workspace 2 2 1 #145 merged
autogalaxy_workspace 6 30 28 #218 merged
autolens_workspace 17 83 61 #492 merged

41 files matches the survey exactly.

The verification that mattered

Recorded in active.md because it generalises: the prompt's diff-empty gate structurally cannot catch a wrong edit here — the generator reads source text, not runtime values, so a corrupted value regenerates identically. The check that does catch it is comparing every changed literal's runtime value HEAD vs worktree, asserting the r prefix only ever removes corruption.

It caught two real errors mid-task: a print("\nInfo:") newline about to be destroyed, and 12 already-escaped $\\chi^2$ about to be doubled into LaTeX line breaks. Final tally across all six repos: 131 repaired, 0 unexpected.

Also recorded: the gate needs one refinement — runtime label strings live in code cells, which copy source verbatim, so an r legitimately shows there. The gate holds exactly as written for every docstring.

Open item

HowToLens#73 is held red rather than merged. Two chapter_3 pixelization scripts fail numba type inference; neither is in the diff, all 8 files that are in it pass, and the failure reproduces identically on one re-run. active.md records the suspicion (PyAutoArray#453, on timing and code area) and explicitly that no mechanism is proven — two candidate mechanisms were tested under the exact CI versions and both passed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MTjtx5mdituitiyQYFGn2E


Generated by Claude Code

claude added 6 commits August 20, 2026 19:55
…ep gate

Resumed /start_dev on draft/maintenance/workspaces/latex_raw_string_docstrings.md.
The task remains BLOCKED and no issue was filed.

Blocker re-verified against PyAutoHands main @ cdea28c, on a probe pair
differing only by an `r` on the first narrative docstring:

  _narrative_docstring_ranges  [(0,2),(6,10)] -> [(6,10)]   (raw block dropped)
  read_env_declaration         ['jax']        -> None

Both silent, neither raises. add_notebook_quotes.py:67 still tests
startswith('"""') and env_config.py:110 still uses ^(?:"""|''')\s*$. No
feature/hands-raw-string-docstring-prefix branch exists on the remote, and its
own blocker feature/hands-hygiene-leftovers is still open.

Two prompt defects found and fixed while re-reading the plan:

- The warning sweep is interpreter-dependent. Invalid escapes are a
  SyntaxWarning only on Python 3.12+; on 3.11 they are a DeprecationWarning.
  Verified on 3.11.15: a docstring containing $\odot$ yields 0 SyntaxWarning
  and 1 DeprecationWarning. The prompt's verification gate ("both sweeps
  return zero") would therefore pass VACUOUSLY on a 3.11 interpreter. Gate and
  sweep spec now require 3.12+ or both warning categories.

- draft/maintenance/autolens_workspace/latex_docstrings_invalid_escape_warnings.md
  is the same task measured on autolens_workspace alone (2026-08-09) — its 80
  warnings across 17 files are exactly the 17 files in the newer survey,
  top-six counts matching. Marked SUPERSEDED, with its unique content (the
  interpreter trap, the "do not reword the prose" constraint) carried across.
  One prompt, one task.

Registry entries for both blocked tasks carry the recheck date and evidence.
…worktree-only

/start_dev on draft/bug/hands/raw_string_docstring_prefix.md, the prerequisite
for latex-raw-string-docstrings.

The prompt recorded it as blocked by hands-hygiene-leftovers. That blocker is
LOCAL WORKTREE CONTENTION, not a code dependency: feature/hands-hygiene-leftovers
touches AGENTS.md, generate_release_notes.py, bin/autohands and two unrelated
tests — zero overlap with add_notebook_quotes.py or env_config.py. Done in a
separate clone, so the two merge in either order and nothing had to wait.

Fix and its six regression tests are implemented, verified and pushed on
PyAutoHands claude/latex-raw-string-docstrings-9h4ine. Each new test confirmed
to fail with the source change reverted. Full suite 14F/337P on the branch vs
14F/331P on main — identical failure sets, all 14 from ipynb-py-convert being
unbuildable in this container (CI installs it).

Prompt advanced draft/ -> active/; registered in active.md; removed from
planned.md. The latex-raw-string-docstrings entry now points at #250 as an
in-flight blocker rather than an unfiled prompt.
…blocked

PyAutoHands PR #251 merged (c887290), all 3 CI matrix jobs green (pytest
3.12/3.13/3.14). Both docstring parsers now accept an optional r/R prefix.

Prompt advanced active/ -> complete/2026/08/; removed from active.md; index
regenerated. The latex-raw-string-docstrings entry in planned.md is now marked
UNBLOCKED and the prompt's own BLOCKED BY section is struck through.

Traps recorded for whoever picks up the workspace task:
- the recorded blocker (hands-hygiene-leftovers) was worktree contention, not a
  code dependency — zero file overlap, verified
- the parity case is the test that matters: read_env_declaration breaks when the
  raw docstring is NOT the one carrying the declaration
- do NOT run black on PyAutoHands; it is not black-formatted (44 files on main)
- ipynb-py-convert will not build in a container; assert on converted source
…kspace repos

41 files, 180 literals, 131 silent corruptions repaired — 41 files matches the
2026-08-20 survey exactly. Pushed on claude/latex-raw-string-docstrings-9h4ine
in HowToFit, HowToGalaxy, HowToLens, autofit_workspace, autogalaxy_workspace
and autolens_workspace. PRs not yet opened.

Verification per repo, in order: baseline regeneration is a NO-OP (so generator
noise cannot fake the gate); both sweeps zero; runtime value check = 131
repaired / 0 unexpected; diff-empty gate passes byte-exactly. autolens_workspace
additionally re-reads all 57 __Env__ declarations identically, and 4 of the
raw-stringed files carry __Env__, exercising PyAutoHands#251 end to end.

Two findings the survey did not have:

- The runtime VALUE check is the gate that actually catches mistakes. The
  diff-empty gate cannot see them: the generator reads source text, not runtime
  values, so a corrupted value regenerates identically. The value check caught
  two real errors mid-task — a `print("\nInfo:")` newline about to be destroyed,
  and 12 already-escaped `$\\chi^2$` about to be doubled into LaTeX line breaks.

- The gate needs one refinement. HowToFit's 4 `plt.ylabel` labels are runtime
  strings in CODE cells, which copy source verbatim, so the `r` legitimately
  appears in the notebook. The gate holds exactly as written for every
  docstring; that one code-cell delta is by design, not a Hands regression.

Residue recorded: autolens_workspace scripts/group/likelihood_function.py uses
the double-backslash convention in three docstrings mixed with single-backslash
macros. Adding `r` would double the already-correct escapes; fixing it means
un-doubling 18 backslashes, a prose edit this task excludes.
… red

Merged: HowToFit#47, HowToGalaxy#70, autofit_workspace#145,
autogalaxy_workspace#218, autolens_workspace#492 — all green, including the CI
'Catalogue staleness' check, which independently re-confirms the regeneration
gate this task was verified against locally.

HowToLens#73 is held RED rather than merged. Two chapter_3 pixelization scripts
fail numba type inference; neither is in the diff, all 8 files that ARE in it
pass, and the failure reproduces identically on one re-run. Prime suspect is
PyAutoArray#453 on timing and code area, but two specific mechanisms were
tested under the exact CI versions and both passed, so no mechanism is proven.
A control re-run of the last GREEN main build is in flight to settle it.
…stry moves

The refresh check caught it: active.md and planned.md changed without the
generated dashboard being regenerated, which AGENTS.md requires after any
registry or draft/ change.
@Jammy2211
Jammy2211 merged commit 66a7815 into main Aug 20, 2026
2 checks passed
Jammy2211 pushed a commit that referenced this pull request Aug 23, 2026
Merged PyAutoHands#254 (ce51277) + the follow-on import fix #255 (5ca3e70).
Records the dual-invocation-context defect the merge exposed and the silent
`except Exception` degradation around it. The stale-remote-branch sweep stays
out of scope for /repo_cleanup.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F11sMzmaVWfU6NCz1PKVVb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants